-- 2022-7-26

--[[
    Lua语言解释器本身处理字符串的能力是十分有限的
    一个程序能够创建，连接，比较和获取字符串，但是不能检视字符串中的类容
    Lua语言处理字符串的完整能力来自于其标准字符串

    字符串标准库默认处理的是8bit字符。
    字符串标准库中的某些功能对UTF-8编码来说还是非常有用的
]]

---[[
    print(string.byte('1')) -- 返回字符 s[i]， s[i+1]， ...　，s[j] 的内部数字编码.
    print(string.byte("123",2)) --返回字符串中第几个字符的编码
    print(string.byte("12345",1,3)) -- 返回字符串中i- j 的字符编码
             -- 常见的用法 string.byte(s,1,-1),会返回字符组成的表，由于lua语言限制了栈的大小，所以也限制了返回值大小为100万个
             -- 因此这个技巧不能用于大小超过1MB的字符串
    print(string.char(97,98,99)) -- 接收零或更多的整数。.返回和参数数量相同长度的字符串.其中每个字符的内部编码值等于对应的参数值.将整数转换为对应的字符
        --上面两个函数用于转换字符及其内部表示。
    print(string.dump)
    print(string.find("Lualualualualua","lua")) -- 查找第一个字符串中匹配到的 pattern
    print(string.format("%d %.2f",10,19)) -- 这是用于进行字符串格式化和将数值输出为字符串的强大工具 
    print(string.gmatch)
    print(string.gsub("abcabcaaa",'a','1')) -- 把匹配到的字符替换，返回字符串和一个替换的次数
    print(string.len("Lua")) -- 返回其长度 等价于#
    print(string.lower("AbCd")) -- 将其中的大写字符都转为小写后返回其副本
    print(string.upper("LuaA")) -- 接收一个字符串，将其中的小写字符都转为大写后返回其副本
        --作为一种典型的应用，我们可以在忽略大小写的情况下比较两个字符串
    print(string.match)
    print(string.pack)
    print(string.packsize)
    print(string.rep("a",10))
    print(string.rep("a",10," "))
        --返回 n 个字符串 s 以字符串 sep 为分割符连在一起的字符串。 默认的 sep 值为空字符串（即没有分割符）。 如果 n 不是正数则返回空串
    print(string.reverse("Lua")) -- 返回字符串 s 的翻转
    print(string.sub("abcdefg",1,3)) -- 返回字符串的子串， 该子串从 i 开始到 j 为止 第一个就是1，也支持负数索引，-1代表最后一个字符
        --返回一个新的字符串
    print(string.unpack)
    --]]